package entity.test09.demo03;

import entity.test09.demo02.Persion;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

public class MainTest {
    public static void main(String[] args) throws Exception {
        // 实例化 Person 对象 - JavaBean 对象
        Person bean = new Person("zing", 18);

        // 获取 JavaBean 对象所表示的 BeanInfo 对象，同时，设置了上限
        // 也就是说，BeanInfo对象一定是指向某个 JavaBean 对象的
        // BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(), Object.class);
        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class, Object.class);

        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        // MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();

        // 循环遍历 Person 对象的所有属性
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            // 获取 Person 对象的属性名称
            String propertyName = propertyDescriptor.getName();

            // 获取Person对象的写方法 -- getter方法
            Method readMethod = propertyDescriptor.getReadMethod();

            // 如果属性是可读的，则输出属性值 - getter方法
            if (readMethod != null) {
                Object value = readMethod.invoke(bean);
                System.out.println(propertyName + "=" + value);
            }
        }
    }
}
